package concurrency.basicthreading.demo;

/**
 * Java中创建一个线程有两种方法：
 * 1. 继承Thread类重写run()方法。
 * 2. 实现Runnable接口并实现run()方法。
 * 
 * Runnable存在的意义在于：Java中不支持多重继承。如果一个类已经继承了其他类。那么我们无法使用线程来驱动该类中的任务。
 * 实际上所有的线程在运行时都是一个Thread实例,虽然可以不用继承Thread实现多线程,但是最终还是Thread的一个实例.
 */
public class Demo01Runnable implements Runnable {
	@Override
	public void run() {
		try {
			System.out.println();
			for (int i = 0; i < 10; i++) {
					System.out.println("#Thread ID:" + Thread.currentThread().getId() + " value : " +i);
					//sleep() 方法让当前线程休眠。这使得线程调度器可以切换到另一个线程。但我们不能依赖于sleep来控制线程的先后执行顺序。
					//因为顺序行为依赖于底层的线程机制，不同的操作系统之间是有差异的。如果必须控制线程的执行顺序，最好使用同步机制。
					Thread.sleep(100);
			}
		} catch (InterruptedException e) {
				e.printStackTrace();
		}
		
		Thread.yield();
	}
	
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
		Thread t = new Thread(new Demo01Runnable());
		//t.start将自动要用RunnableInterface中的Run方法。
		t.start();
		System.out.println();
		}
	}
}

